function isArrayFn (value) {
  if (typeof Array.isArray === 'function') {
    return Array.isArray(value)
  } else {
    return Object.prototype.toString.call(value) === '[object Array]'
  }
}
function isObjectFn (val) {
  return val != null && typeof val === 'object' && isArrayFn(val) === false
}
function isEmptyObjectFn (val) {
  return isObjectFn(val) && Object.keys(val).length === 0
}
function isString (value) {
  const type = typeof value
  return (
    type === 'string' ||
    (type === 'object' &&
      value != null &&
      !Array.isArray(value) &&
      Object.prototype.toString.call(value) === '[object String]')
  )
}
function isFunction (obj) {
  return Object.prototype.toString.call(obj) === '[object Function]'
}
export { isArrayFn, isObjectFn, isEmptyObjectFn, isString, isFunction }
